跳到主要内容

DFS用户常用命令 ⭐️⭐️

格式:  hdfs dfs command

其实hdfs dfs很多命令的用法跟linux如出一辙,包含参数用法。

只是前者是本地文件系统,后者是分布式文件系统,但后者继承前者功能。这块命令的学习开发了解即可。

-help 使用

帮助命令,用户查询后置的参数输入格式

[root@ds-bigdata-001 current]# hdfs dfs -help

-ls 显示目录信息

查看目录下内容,包括文件名,权限,所有者,大小和修改时间

命令格式:[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]]

选项:-R  递归地显示子目录下的内容

[root@ds-bigdata-001 ~]#  hdfs dfs -ls /
Found 3 items
drwxr-xr-x - hdfs supergroup 0 2021-12-20 22:39 /test
drwxrwxrwt - hdfs supergroup 0 2021-12-31 11:06 /tmp
drwxr-xr-x - hdfs supergroup 0 2021-12-28 14:58 /user

-mkdir:在HDFS上创建目录

创建文件夹

命令格式:[-mkdir [-p] <path> ...]

选项:-p 很像Unix mkdir -p,沿路径创建父目录。

[root@ds-bigdata-001 ~]# hdfs dfs -mkdir /tmp/dsdir 
[root@ds-bigdata-001 ~]# hdfs dfs -mkdir -p /tmp/dsdir/ds_test/ds_file

-get:下载文件到本地

命令格式:[-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]

[root@ds-bigdata-001 ~]# hdfs dfs -get /tmp/dsdir/1.mv.txt get.txt
[root@ds-bigdata-001 ~]# cat get.txt
test appendtofile
test appendtofile2

-getmerge

将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件(把两个文件的内容合并起来)

Usage:hdfs dfs -getmerge < src> < localdst> [addnl]

注:合并后的文件位于当前目录,不在hdfs中,是本地文件

[root@ds-bigdata-001 ~]# hdfs dfs -getmerge /tmp/dsdir/* test.txt
[root@ds-bigdata-001 ~]# more test.txt
test appendtofile
test appendtofile2
test appendtofile3
test dfs copyfromlocal
test DFS MoveFromLocal
test hdfs put

-put:上传

将本地文件传输到hdfs

命令格式:[-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]

-rm:删除文件或文件夹

删除一个文件或目录

Usage:hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI …]

选项:

如果文件不存在,-f选项将不显示诊断消息或修改退出状态以反映错误。

-R选项以递归方式删除目录及其下的任何内容。

-r选项等效于-R。

-skipTrash选项将绕过垃圾桶(如果已启用),并立即删除指定的文件。当需要从超配额目录中删除文件时,这非常有用。

[root@ds-bigdata-001 ~]# hdfs dfs -rm /tmp/dsdir/1.txt.bak
21/12/31 11:31:24 INFO fs.TrashPolicyDefault: Moved: 'hdfs://ds-nameservice1/tmp/dsdir/1.txt.bak' to trash at: hdfs://ds-nameservice1/user/hdfs/.Trash/Current/tmp/dsdir/1.txt.bak

-appendToFile:追加新内容到旧文件末尾

追加一个或者多个文件到hdfs指定文件中.也可以从命令行读取输入.

命令格式:[-appendToFile <localsrc> ... <dst>]

[root@ds-bigdata-001 ~]# echo "test appendtofile" >1.txt
[root@ds-bigdata-001 ~]# echo "test appendtofile2" >2.txt
[root@ds-bigdata-001 ~]# hdfs dfs -appendToFile ./1.txt /tmp/dsdir/1.txt
[root@ds-bigdata-001 ~]# hdfs dfs -cat /tmp/dsdir/1.txt
test appendtofile
[root@ds-bigdata-001 ~]# hdfs dfs -appendToFile ./2.txt /tmp/dsdir/1.txt

-cp : HDFS上复制文件到新路径

在HDFS文件系统中,将文件或目录复制到目标路径下

命令格式:[-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]

选项:-f选项覆盖已经存在的目标。

-p选项将保留文件属性[topx](时间戳,所有权,权限,ACL,XAttr)。如果指定了-p且没有arg,则保留时间戳,所有权和权限。如果指定了-pa,则还保留权限,因为ACL是一组超级权限。确定是否保留原始命名空间扩展属性与-p标志无关。

[root@ds-bigdata-001 ~]# hdfs dfs -cp /tmp/dsdir/1.txt /tmp/dsdir/1.txt.bak
[root@ds-bigdata-001 ~]# hdfs dfs -ls /tmp/dsdir/
Found 5 items
-rw-r--r-- 3 root supergroup 37 2021-12-31 11:04 /tmp/dsdir/1.txt
-rw-r--r-- 3 root supergroup 37 2021-12-31 11:10 /tmp/dsdir/1.txt.bak

-mv:在HDFS目录中移动文件

在HDFS文件系统中,将文件或目录从HDFS的源路径移动到目标路径。不允许跨文件系统移动文件。

命令格式:[-mv <src> ... <dst>]

[root@ds-bigdata-001 ~]# hdfs dfs -mv /tmp/dsdir/1.txt /tmp/dsdir/1.mv.txt
[root@ds-bigdata-001 ~]# hdfs dfs -ls /tmp/dsdir/
Found 5 items
-rw-r--r-- 3 root supergroup 37 2021-12-31 11:04 /tmp/dsdir/1.mv.txt
-rw-r--r-- 3 root supergroup 37 2021-12-31 11:10 /tmp/dsdir/1.txt.bak

-cat:显示文件内容

显示文件内容到标准输出上。

命令格式:[-cat [-ignoreCrc] <src> ...]

[root@ds-bigdata-001 ~]# hdfs dfs -cat /tmp/dsdir/1.txt
test appendtofile
test appendtofile2

-tail:显示一个文件的末尾

显示文件的最后1kb内容到标准输出

命令格式:

Usage: Hadoop fs [generic options] -tail [-f] <file>

选项:-f选项将在文件增长时输出附加数据,如在Unix中一样。

[root@ds-bigdata-001 ~]# hdfs dfs -tail /tmp/dsdir/1.mv.txt
test appendtofile
test appendtofile2
#主机A:
[root@ds-bigdata-001 ~]# hdfs dfs -tail -f /tmp/dsdir/1.mv.txt
test appendtofile
test appendtofile2
#主机B:
[root@ds-bigdata-001 ~]# echo "test appendtofile3" >appd3.txt
[root@ds-bigdata-001 ~]# hdfs dfs -appendToFile appd3.txt /tmp/dsdir/1.mv.txt
#主机A动态显示
[root@ds-bigdata-001 ~]# hdfs dfs -tail -f /tmp/dsdir/1.mv.txt
test appendtofile
test appendtofile2
test appendtofile3

-find:查找文件

查询文件

命令格式:[-find <path> ... <expression> ...]

[root@ds-bigdata-001 ~]# hdfs dfs -find / -name 1.txt.bak
/tmp/dsdir/1.txt.bak

-du:统计文件夹的大小信息

显示给定目录中包含的文件和目录的大小或文件的长度,用字节大小表示,文件名用完整的HDFS协议前缀表示,以防它只是一个文件。

Usage:hdfs dfs -du [-s] [-h] URI [URI …]

选项:

-s选项将显示文件长度的汇总摘要,而不是单个文件。

-h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)

[root@ds-bigdata-001 ~]# hdfs dfs -du /tmp/dsdir
56 168 /tmp/dsdir/1.mv.txt
23 69 /tmp/dsdir/copyfromlocal.txt
0 0 /tmp/dsdir/ds_test
23 69 /tmp/dsdir/movefromlocal.txt
15 45 /tmp/dsdir/put.txt

其他修改文件权限类命令和linux一样

-chgrp 、-ch/mod、-chown

[root@ds-bigdata-001 ~]# hdfs dfs -ls /tmp/dsdir/
Found 5 items
-rw-r--r-- 3 root supergroup 56 2021-12-31 11:15 /tmp/dsdir/1.mv.txt
-rw-r--r-- 3 root supergroup 23 2021-12-31 11:06 /tmp/dsdir/copyfromlocal.txt
drwxr-xr-x - root supergroup 0 2021-12-31 10:54 /tmp/dsdir/ds_test
-rw-r--r-- 3 root supergroup 23 2021-12-31 10:59 /tmp/dsdir/movefromlocal.txt
-rw-r--r-- 3 root supergroup 15 2021-12-31 11:12 /tmp/dsdir/put.txt
[root@ds-bigdata-001 ~]# hdfs dfs -chown hdfs /tmp/dsdir/1.mv.txt
[root@ds-bigdata-001 ~]# hdfs dfs -chmod 777 /tmp/dsdir/put.txt
[root@ds-bigdata-001 ~]# hdfs dfs -chgrp root /tmp/dsdir/ds_test
[root@ds-bigdata-001 ~]# hdfs dfs -ls /tmp/dsdir
Found 5 items
-rw-r--r-- 3 hdfs supergroup 56 2021-12-31 11:15 /tmp/dsdir/1.mv.txt
-rw-r--r-- 3 root supergroup 23 2021-12-31 11:06 /tmp/dsdir/copyfromlocal.txt
drwxr-xr-x - root root 0 2021-12-31 10:54 /tmp/dsdir/ds_test
-rw-r--r-- 3 root supergroup 23 2021-12-31 10:59 /tmp/dsdir/movefromlocal.txt
-rwxrwxrwx 3 root supergroup 15 2021-12-31 11:12 /tmp/dsdir/put.txt

-setrep:设置HDFS中文件的副本数量

改变一个文件的副本系数。-R选项用于递归改变目录下所有文件的副本系数。

格式:[-setrep [-R] [-w] <rep> <path> ...]

[root@ds-bigdata-001 ~]# hdfs dfs -ls /tmp/dsdir/1.mv.txt
-rw-r--r-- 3 hdfs supergroup 56 2021-12-31 11:15 /tmp/dsdir/1.mv.txt
[root@ds-bigdata-001 ~]# hdfs dfs -setrep 2 /tmp/dsdir/1.mv.txt
Replication 2 set: /tmp/dsdir/1.mv.txt
[root@ds-bigdata-001 ~]# hdfs dfs -ls /tmp/dsdir/1.mv.txt
-rw-r--r-- 2 hdfs supergroup 56 2021-12-31 11:15 /tmp/dsdir/1.mv.txt